#include "loaderobj.hpp"

loaderOBJ::loaderOBJ()
{
}

loaderOBJ::loaderOBJ(string file_name)
{
    ifs.open(file_name.c_str(), ifstream::in);
    contenu = "";
}

/**
  Méthode de chargement des objets
*/
void loaderOBJ::loadObject(vector<objetOBJ> &objects)
{
    string fichier;

    size_t find_o;
    size_t find_v;
    size_t find_f;
    size_t find_space;

    double p_coord;
    Point3d tmp_point;

    int obj_count = -1;
    int vertex_total = 0;

    while(!ifs.eof())
    {
        string ligne;
        getline(ifs, ligne);
        find_o = ligne.find('o');
        find_v = ligne.find('v');
        find_f = ligne.find('f');
         if(find_o == 0)
        {
            fichier += ligne;
            obj_count++;
            find_space = ligne.find(' ');
            ligne = ligne.substr(find_space);

            objetOBJ tmp_obj(ligne);
            objects.push_back(tmp_obj);
            vertex_total += (_points.size());
            _points.clear();
        }
        if((find_v == 0) && obj_count >= 0)
        {
            istringstream buf_i;

            fichier += ligne;
            find_space = ligne.find(' ');
            ligne = ligne.substr(find_space);

            buf_i.str(ligne);

            buf_i >> p_coord;
            tmp_point.setX(p_coord);
            buf_i >> p_coord;
            tmp_point.setY(p_coord);
            buf_i >> p_coord;
            tmp_point.setZ(p_coord);

            _points.push_back(tmp_point);
        }
        if((find_f == 0) && obj_count >= 0)
        {
            istringstream buf_i;
            int num_vertex;
            bool valid = true;

            fichier += ligne;
            find_space = ligne.find(' ');
            ligne = ligne.substr(find_space);
            buf_i.str(ligne);

            string i;

            while(valid)
            {
                buf_i >> num_vertex;
                if(!buf_i.fail())
                {
                    objects.at(obj_count).addPoint(
                                _points.at(
                                    ((num_vertex-1) - (vertex_total))
                                    ));
                }
                else
                    valid= false;
            }
        }
    }
    contenu = fichier;
    ifs.close();
}

string loaderOBJ::getContentFile()
{
    return contenu;
}

